package pe.com.bbva.ge.negocio.impl;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import pe.com.bbva.ge.domain.base.Auditoria;
import pe.com.bbva.ge.negocio.CrudNegocio;
import pe.com.bbva.ge.persistencia.orm.CrudORM;
import pe.com.bbva.ge.utileria.UtileriaComun;

@Transactional(readOnly=true)
public abstract class CrudNegocioImpl extends BaseNegocioImpl implements CrudNegocio {

	/**
	 * 
	 */
	private static final long serialVersionUID = -154303945369566150L;
	
	@Autowired
	private CrudORM crudORM;

	@Override
	@Transactional
	public <Entidad> void crear(Entidad entidad) {
		crudORM.crear(entidad);
	}

	@Override
	@Transactional
	public <Entidad> void modificar(Entidad entidad) {
		crudORM.modificar(entidad);
	}
	
	@Override
	@Transactional
	public <Entidad> void eliminar(Serializable id, Class<Entidad> clase) {
		Entidad entidad = obtener(id, clase);
		eliminar(entidad);
	}

	@Override
	@Transactional
	public <Entidad> void eliminar(Entidad entidad) {
		crudORM.eliminar(entidad);
	}

	@Override
	public <Entidad> Entidad obtener(Serializable id, Class<Entidad> clase) {
		return crudORM.obtener(id, clase);
	}

	@Override
	@Transactional
	public <Entidad> void grabarTodos(List<Entidad> lista) {
		crudORM.grabarTodos(lista);
	}

	@Override
	@Transactional
	public <Entidad> void eliminarTodos(List<Entidad> lista) {
		crudORM.eliminarTodos(lista);
	}

	@Override
	public <Entidad> List<Entidad> obtenerTodos(Class<Entidad> clase) {
		return crudORM.obtenerTodos(clase);
	}

	@Override
	public <Entidad> long contar(Class<Entidad> clase) {
		return crudORM.contar(clase);
	}
	
	@Override
	public <Entidad> List<Entidad> obtenerActivos(Class<Entidad> clase) {
		return crudORM.obtenerActivos(clase);
	}

}
